package Mundo;

public class StackAbstracto implements Stack {

	//-----------------------------------------------------------------
    // Atributos
    //-----------------------------------------------------------------
	
	/**
     * Primer elemento de la lista
     */
    private Elemento primero; 
	
	/**
	 * Tamaño actual del vector
	 */
	public int tam;
	
	//-----------------------------------------------------------------
    // Constructores
    //-----------------------------------------------------------------
	
	/**
	 * Constructor del Stack
	 */
	public StackAbstracto()
	{
		tam = 0;
		primero = null;
	}
	
	// -----------------------------------------------------------------
    // Métodos
    // -----------------------------------------------------------------
	
	/**
	 * Declara si la pila está vacía
	 * @return true si está vacía
	 * @return false si tiene algún elemento
	 */
	public boolean empty() 
	{
		if (tam == 0)
			return true;
		return false;
	}

	/**
	 * Obtiene el primer elemento en la pila
	 * @return Elemento
	 */
	public Elemento getFirst() 
	{
		if (tam == 0)
			return null;
		Elemento num = primero;
		return num;
	}

	/**
	 * Obtiene y retorna el valor del último objeto
	 * @return int
	 */
	public Object pop() 
	{
		if (tam == 0)
			return null;
		Elemento elm = getFirst();
		primero = primero.siguiente;
		tam--;
		return elm.darValor();
	}

	/**
	 * Guarda el objeto que se le da de parámetro en el vector
	 * @param Object
	 */
	public void push(Object num) 
	{
		int valor = Integer.parseInt(num.toString());
		Elemento elm = new Elemento(valor);
		elm.cambiarSiguiente(primero);
		primero = elm;
		tam++; 
	}

	/**
	 * Da el tamaño actual del vector
	 * @return int
	 */
	public int tamano() 
	{		
		return tam;
	}

}
